/**
 * 给定S和T两个字符串，其中S恰好比T少一个字母。
 * 问是否可以在S的某个位置上添加一个字母，使得S==T
 * 输出所有方案。
 *     ssssspsssss
 *     ttttttttttt
 * 假设在p位置添加一个字母满足S==T，则显然前面的s必须等于t，后面的s必须等于t
 * 因此弄一个A数组，记录前缀相等的情况
 * 弄一个B数组，记录后缀相等的情况
 * 然后枚举每个位置即可。
 * 实际上A和B都是单调的，最好情况下不需要枚举N个位置，不过无所谓了
 */
#include <bits/stdc++.h>
#include <bits/extc++.h>
using namespace std;

using llt = long long;
using vi = vector<int>;
using vll = vector<llt>;
using pii = pair<int, int>;
using pll = pair<llt, llt>;

int N;
string S, T;
vi A, B;

vector<pair<int, char>> Ans;

void proc(){
    if(B[1]){
        Ans.emplace_back(0, T[0]);
    }
    for(int i=1;i<N-1;++i){
        if(A[i - 1] and B[i + 1]){
            Ans.emplace_back(i, T[i]);
        }
    }
    if(A[N - 2]){
        Ans.emplace_back(N - 1, T[N - 1]);
    }
    return;
}

void work(){
    cin >> S >> T;
    N = T.length();

    A.assign(N - 1, 0);
    B.assign(N, 0);

    for(int i=0;i<N-1;++i){
        if(S[i] != T[i]) break;
        A[i] = 1;
    }

    for(int i=N-1;i>0;--i){
        if(S[i - 1] != T[i]) break;
        B[i] = 1;
    }

    proc();

    cout << Ans.size() << "\n";
    for(const auto & p : Ans) cout << p.first << " " << p.second << "\n";
    return;
}


int main(){
#ifndef ONLINE_JUDGE
    freopen("z.txt", "r", stdin);
#endif
    ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);	
    int nofkase = 1;
	// cin >> nofkase;
	while(nofkase--) work();
	return 0;
}